package core.hmxchen.log.annotation;

import core.hmxchen.log.enums.Level;
import core.hmxchen.log.enums.Position;
import core.hmxchen.log.enums.Print;
import java.lang.annotation.*;
/**
 * @author hmxchen
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface LogPrint {
    /**
     * 功能说明
     * @return
     */
    String biz() default "";
    /**
     * 日志级别
     *DEBUG
     *INFO
     *WARN
     *ERROR
     *@return
     */
    Level level() default Level.UNKNOWN;
    /**
     * 代码定位支持（是否显示方法所在行数）
     * Position.DISABLED 关闭
     * Position.ENABLED 开启
     * @return
     */
    Position position() default Position.UNKNOWN;
    /**
     * 参数过滤（目前只过滤输入参数）
     * @return
     */
    String[] paramFilter() default {};
    /**
     * 打印类型
     * Print.DO_BEFORE_LOG 输入参数日志
     * Print.AROUND_LOG 环绕日志
     * Print.AFTER_RETURN_LOG 输出结果日志
     * Print.AFTER_THROW_LOG 输出异常日志
     * @return
     */
    Print[] print() default {Print.DO_BEFORE_LOG,Print.AROUND_LOG,Print.AFTER_RETURN_LOG,Print.AFTER_THROW_LOG};
    /**
     * 1.日志格式实现类，需要继承LogFormatter接口
     * 2.填写实现类全类名，位置需要与所填写的打印类型一一对应
     * 比如打印类型所填写的时：输入参数日志 输出结果日志
     * 那么：日志实现：输入参数格式化日志实现类 输出结果格式化日志实现类
     * @return
     */
    String[] logImplClass() default {};
}
